---
title: Controller 控制器
icon: Gamepad
relatedFile: app/src/core/service/controlService/controller/Controller.tsx
---

这个服务是一个核心的交互控制器，负责管理用户在画布上的所有输入事件，包括鼠标、键盘和触摸操作。它不直接实现具体的交互逻辑，而是作为各种细粒度交互控制器（如相机控制、实体选择与移动、节点连接、图形编辑等）的调度中心和事件分发器。通过统一的事件处理机制，它确保了不同交互模式之间的协调与状态同步。

## 主要功能

*   **事件监听与分发**: 监听并处理来自画布的键盘、鼠标和触摸事件，如按键按下/抬起、鼠标点击/抬起、滚轮滚动、触摸开始/移动/结束等。
*   **状态管理**: 维护当前按下的键、鼠标按钮状态、鼠标位置、上次操作时间、选中的实体等关键交互状态。
*   **浏览器默认行为阻止**: 阻止浏览器对特定按键组合（如 Ctrl+F、F3、R）的默认行为，以确保应用内的交互体验。
*   **子控制器集成**: 在初始化时动态加载并管理多个具体的交互子控制器，将复杂的交互逻辑委托给这些专门的模块处理。
*   **操作时间记录**: 记录用户最后一次操作的时间，用于优化渲染性能，当长时间无操作时减少不必要的屏幕刷新。

## API 方法

### `setCursorNameHook(_: CursorNameEnum): void`

设置光标名称的回调函数，用于根据当前交互模式更新用户界面的光标样式。

### `pressingKeysString(): string`

返回一个字符串，表示当前所有按下的键盘按键。

### `recordManipulate(): void`

记录一次用户操作，更新最后操作时间戳。

### `isManipulateOverTime(): boolean`

检查自上次用户操作以来是否已超过预设的空闲时间，用于判断是否可以进入低刷新率模式。

### `dispose(): void`

释放资源，移除所有绑定的事件监听器，并销毁所有子控制器。

### `mousedown(event: MouseEvent): void`

处理鼠标按下事件，更新鼠标按钮状态并记录操作。

### `mouseup(event: MouseEvent): void`

处理鼠标抬起事件，更新鼠标按钮状态并记录操作。

### `mousewheel(event: WheelEvent): void`

处理鼠标滚轮事件，阻止默认行为并记录操作。

### `keydown(event: KeyboardEvent): void`

处理键盘按下事件，记录按键状态，阻止特定浏览器默认行为，并记录操作。

### `keyup(event: KeyboardEvent): void`

处理键盘抬起事件，更新按键状态，并记录操作。

### `touchstart(e: TouchEvent): void`

处理触摸开始事件，记录触摸点信息，并记录操作。

### `touchmove(e: TouchEvent): void`

处理触摸移动事件，根据触摸点移动和缩放画面，并记录操作。

### `touchend(e: TouchEvent): void`

处理触摸结束事件，处理触摸点信息，并记录操作。
